home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / C / LIB / PARI / PARI1 / pari / a / version_A
Text File  |  1992-01-03  |  5KB  |  205 lines

  1. ;Level zero kernel functions for  PARI
  2. ;  By C.T.Stretch  Fri,03 Jan 1992
  3.  
  4. ; Registers
  5. a1=0
  6. a2=1
  7. a3=2
  8. a4=3
  9. v1=4
  10. v2=5
  11. v3=6
  12. v4=7
  13. v5=8
  14. v6=9
  15. sl=10
  16. fp=11
  17. ip=12
  18. sp=13
  19. lr=14
  20. pc=15
  21.  
  22. ;       ADR macro
  23.  
  24. .MACRO  ADR reg, label
  25. .IF     (label) >= $ + 8
  26.         ADD     reg,pc,#(label)-$-8
  27. .ELSE
  28.         SUB     reg,pc,#$+8-(label)
  29. .ENDIF
  30. .ENDM
  31.  
  32. .EXTERN x$stack_overflow,x$udivide
  33. .EXTERN pariputs
  34.              
  35.  
  36. .AREA C$$data
  37.  
  38. overflow::     .LONG  0
  39. hiremainder::  .LONG  0
  40.  
  41. printversion:: MOV    ip,sp              
  42.                STMFD  sp!,{fp,ip,lr,pc}
  43.                SUB    fp,ip,#4
  44.                CMPS   sp,sl
  45.                BLLT   x$stack_overflow
  46.                ADR    a1,string
  47.                B      pariputs 
  48. string:        .ASCII "             GP/PARI CALCULATOR Version 1.36\n"
  49.                .ASCIZ "                 (Archimedes version)\n"
  50.                .ALIGN
  51.  
  52. addll::        ADDS   a1,a1,a2
  53.                MOVCC  a2,#0 
  54.                MOVCS  a2,#1
  55.                STR    a2,overflow
  56.                MOVS   pc,lr
  57.  
  58. addllx::       LDR    a3,overflow
  59.                MOVS   a3,a3,LSR #1
  60.                ADCS   a1,a1,a2
  61.                MOVCS  a3,#1
  62.                STR    a3,overflow
  63.                MOVS   pc,lr
  64.  
  65. subll::        SUBS   a1,a1,a2
  66.                MOVCC  a2,#1 
  67.                MOVCS  a2,#0
  68.                STR    a2,overflow
  69.                MOVS   pc,lr
  70.  
  71. subllx::       LDR    a3,overflow
  72.                RSBS   a3,a3,#0
  73.                SBCS   a1,a1,a2
  74.                MOVCC  a3,#1
  75.                MOVCS  a3,#0
  76.                STR    a3,overflow
  77.                MOVS   pc,lr
  78.  
  79. shiftl::       RSB    a3,a2,#32
  80.                MOV    a3,a1,LSR a3
  81.                STR    a3,hiremainder
  82.                MOV    a1,a1,ASL a2
  83.                MOVS   pc,lr
  84.  
  85. shiftlr::      RSB    a3,a2,#32
  86.                MOV    a3,a1,ASL a3
  87.                STR    a3,hiremainder
  88.                MOV    a1,a1,LSR a2
  89.                MOVS   pc,lr
  90.  
  91. bfffo::        MOV    a2,#0
  92.                CMP    a1,#1<<16
  93.                MOVLO  a1,a1,LSL #16
  94.                ADDLO  a2,a2,#16
  95.                CMP    a1,#1<<24
  96.                MOVLO  a1,a1,LSL #8
  97.                ADDLO  a2,a2,#8
  98.                CMP    a1,#1<<28
  99.                MOVLO  a1,a1,LSL #4
  100.                ADDLO  a2,a2,#4
  101.                CMP    a1,#1<<30
  102.                MOVLO  a1,a1,LSL #2
  103.                ADDLO  a2,a2,#2
  104.                CMP    a1,#1<<31
  105.                ADDLO  a2,a2,#1
  106.                MOV    a1,a2
  107.                MOVS   pc,lr
  108.  
  109. mulll::        MOV    ip,a1,LSR #16
  110.                MOV    a4,a2,LSR #16
  111.                BIC    a1,a1,ip,LSL #16
  112.                BIC    a2,a2,a4,LSL #16 
  113.                MUL    a3,a1,a2
  114.                MUL    a2,ip,a2
  115.                MUL    a1,a4,a1
  116.                MUL    a4,ip,a4
  117.                ADDS   ip,a2,a1
  118.                ADDCS  a4,a4,#1<<16
  119.                ADDS   a1,a3,ip,LSL #16
  120.                ADC    a4,a4,ip,LSR #16
  121.                STR    a4,hiremainder
  122.                MOVS   pc,lr
  123.  
  124. addmul::       MOV    ip,a1,LSR #16
  125.                MOV    a4,a2,LSR #16
  126.                BIC    a1,a1,ip,LSL #16
  127.                BIC    a2,a2,a4,LSL #16 
  128.                MUL    a3,a1,a2
  129.                MUL    a2,ip,a2
  130.                MUL    a1,a4,a1
  131.                MUL    a4,ip,a4
  132.                ADDS   ip,a2,a1
  133.                ADDCS  a4,a4,#1<<16
  134.                ADDS   a1,a3,ip,LSL #16
  135.                ADC    a4,a4,ip,LSR #16
  136.                LDR    ip,hiremainder
  137.                ADDS   a1,a1,ip
  138.                ADDCS  a4,a4,#1
  139.                STR    a4,hiremainder
  140.                MOVS   pc,lr
  141.  
  142. xl=a1
  143. xu=a4
  144. du=a2
  145. dl=a3
  146. q=v1
  147. sumbit=ip
  148.  
  149. divll::        STMFD  sp!, {v1}
  150.                LDR    xu,hiremainder
  151.                MOV    q,#0
  152.                MOV    dl,#0
  153.                MOV    sumbit,#1<<31
  154. toploop:       MOVS   du,du,LSR #1
  155.                MOV    dl,dl,RRX
  156.                CMP    xu,du
  157.                CMPEQ  xl,dl
  158.                BLO    nosub
  159.                SUBS   xl,xl,dl
  160.                SBC    xu,xu,du
  161.                ADD    q,q,sumbit
  162. nosub:         MOVS   sumbit,sumbit,LSR #1 
  163.                BNE    toploop
  164.                STR    xl,hiremainder
  165.                MOV    a1,q
  166.                LDMFD  sp!,{v1}
  167.                MOVS   pc,lr
  168.  
  169. du2=a3
  170. dl2=a2
  171.  
  172. mulmodll::     STMFD  sp!, {v1,lr}
  173.                MOV    ip,a1,LSR #16
  174.                MOV    a4,a2,LSR #16
  175.                BIC    a1,a1,ip,LSL #16
  176.                BIC    a2,a2,a4,LSL #16 
  177.                MUL    v1,a1,a2
  178.                MUL    a2,ip,a2
  179.                MUL    a1,a4,a1
  180.                MUL    a4,ip,a4
  181.                ADDS   ip,a2,a1
  182.                ADDCS  a4,a4,#1<<16
  183.                ADDS   a1,v1,ip,LSL #16
  184.                ADC    a4,a4,ip,LSR #16
  185.                MOV    dl2,#0
  186.                MOV    sumbit,#1<<31
  187. toploop2:      MOVS   du2,du2,LSR #1
  188.                MOV    dl2,dl2,RRX
  189.                CMP    xu,du2
  190.                CMPEQ  xl,dl2
  191.                BLO    nosub2
  192.                SUBS   xl,xl,dl2
  193.                SBC    xu,xu,du2
  194. nosub2:        MOVS   sumbit,sumbit,LSR #1 
  195.                BNE    toploop2
  196.                LDMFD  sp!,{v1,pc}^
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.